package model

type RespCode string

const (
	OK                     RespCode = "OK"
	MethodArgumentNotValid RespCode = "METHOD_ARGUMENT_NOT_VALID"
	InternalServerError    RespCode = "INTERNAL_SERVER_ERROR"
)

// ResponseBodyEntity 响应体
type ResponseBodyEntity struct {
	Code    RespCode `json:"code"`
	Message string   `json:"message"`
	Data    any      `json:"data"`
}

// PageVO 结构体定义
type PageVO struct {
	Total   int `json:"total"`
	Records any `json:"records"`
	Extra   any `json:"extra"`
}

// LoginVO 登录成功返回值
type LoginVO struct {
	Token string `json:"token"`
}

type FileVO struct {
	Id         int64   `json:"id"`
	Name       string  `json:"name"`
	Size       int64   `json:"size"`
	Modified   int64   `json:"modified"`
	LocalPath  *string `json:"localPath"`
	RemotePath *string `json:"remotePath"`
	CreatedAt  int64   `json:"createdAt"`
	UpdatedAt  *int64  `json:"updatedAt"`
}

// HistoryVO 同步历史记录
type HistoryVO struct {
	Id         int64   `json:"id"`
	Name       string  `json:"name"`
	Size       int64   `json:"size"`
	Modified   int64   `json:"modified"`
	LocalPath  *string `json:"localPath"`
	RemotePath *string `json:"remotePath"`
	Status     int     `json:"status"`
	Message    *string `json:"message"`
	SyncedAt   *int64  `json:"syncedAt"`
	CreatedAt  int64   `json:"createdAt"`
}

type SyncStatsVO struct {
	Last24hCount       int `json:"last24hCount"`       // 今日同步数量
	Last24hFailedCount int `json:"last24hFailedCount"` // 今日失败数量
	TotalCount         int `json:"totalCount"`         // 累计同步数量
	TotalFailedCount   int `json:"totalFailedCount"`   // 累计失败次数
}

type FileStatsVO struct {
	TotalCount int `json:"totalCount"` // 本地总文件数量
}

type ConfigVO struct {
	Syncer string `json:"syncer"`
	Sync   struct {
		Paths []struct {
			Local  string `json:"local"`
			Remote string `json:"remote"`
		} `json:"paths"`
		Interval int      `json:"interval"`
		Excludes []string `json:"excludes"`
	} `json:"sync"`
	Http struct {
		Addr           string `json:"addr"`
		Port           int    `json:"port"`
		Username       string `json:"username"`
		SessionTimeout int    `json:"sessionTimeout"`
	} `json:"http"`
	Db struct {
		Driver     string `json:"driver"`
		DataSource any    `json:"dataSource"`
	} `json:"db"`
	S3 struct {
		Region     string `json:"region"`
		BucketName string `json:"bucketName"`
	} `json:"s3"`
	Oss struct {
		Endpoint   string `json:"endpoint"`
		BucketName string `json:"bucketName"`
	} `json:"oss"`
}

type OverviewVO struct {
	Version   string      `json:"version"`
	SyncStats SyncStatsVO `json:"syncStats"`
	FileStats FileStatsVO `json:"fileStats"`
	Config    ConfigVO    `json:"config"`
}

type Last30dSyncStatisticsVO struct {
	Last30dSyncTotalCount   map[string]int `json:"last30dSyncTotalCount"`
	Last30dSyncPendingCount map[string]int `json:"last30dSyncPendingCount"`
	Last30dSyncSuccessCount map[string]int `json:"last30dSyncSuccessCount"`
	Last30dSyncFailedCount  map[string]int `json:"last30dSyncFailedCount"`
}

type StatisticsVO struct {
	Last30dSyncStatistics Last30dSyncStatisticsVO `json:"last30dSyncStatistics"`
}
